一次搞懂js的加法运算规则 您所在的位置:网站首页 js 加法 一次搞懂js的加法运算规则

一次搞懂js的加法运算规则

#一次搞懂js的加法运算规则| 来源: 网络整理| 查看: 265

问个问题:[] + {} 和 {} + [] 打印什么, 结果分别是'[object Object]' 和 0 (可以去控制台打印看看)

js的加法作用 作为数值运算加法,比如 1 + 1 = 2 作为字符串拼接 ,比如 'miku' + 'a' = 'mikua' 在js中,加法运算的规则很简单,只会触发两种情况: number + number string + string js加法规则 两个操作数都是number类型, 作为数值运算直接运算得出结果 有一个数为string,则将另一个操作数隐式的转换为string,然后通过字符串拼接得出结果: 像'1' + 1 结果为11、true+'false'结果为'truefalse' 布尔值这种简单的数据类型,那么将会转换为number类型来进行运算得出结果: 像true + false结果为1、true + 1结果为2 操作数为对象或者是数组这种复杂的数据类型,那么就将两个操作数都转换为字符串,进行拼接, 像 [] + true结果为'true'、true + {}结果为 回到问题: [] + {}, []会通过隐式转换规则,调用toString方法转换为 '' ,同理{}转换为'[object Object]', 相加得出字符串拼接结果 '[object Object]'

那为什么{} + []为0, 在js中{}代表复合语句,在一些js解释器会将开头的 {} 看作一个代码块,而不是一个Object(在es6以前只有函数作用域与全局作用域,还没有块级作用域)而这里的{}只是空符号, 不表明任何意思, 所以{} + []实际上是 + [], 是个一元加运算, 当一元加应当到非数值时, 会使用Number()进行转换, 所以结果为0

最后再看{} + {}, 这个按之前的说法就是+ {}, 结果就是NaN了, 在Firefox浏览器是的, 然而在Chrome浏览器里, 像{} + []、{} + true等的结果是都是按一元加来算的, 只有{} + {}结果是'[object Object][object Object]', 感觉是Chrome浏览器里是做处理的



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有